package com.cw.DesignModel23.Structural.FlyweightPattern.Flyweight1;

/**
 * 5. 用户调用 :
 * ① 用户声明对象类型 : 用户声明 AbstractFlyweight 抽象享元类的对象 , 从享元工厂类的对象池中获取对象 ;
 * ② 新建对象 : 如果对象池中没有对象 , 会调用构造函数 , 创建该对象 , 并放入对象池中 , 再返回该对象 ;
 * ② 复用对象 : 如果对象池中有该享元对象 , 那么直接从线程池中获取该对象 , 并返回 ;
 * ————————————————
 * 版权声明：本文为CSDN博主「韩曙亮」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/shulianghan/article/details/105452239
 */
public class Main {
    /**
     * 注意 : 享元对象使用时, 创建的是抽象的享元类
     * @param args
     */
    public static void main(String[] args) {
        //外部状态值为 "tom" , 对象池中没有该对象, 创建后放入对象池, 然后从对象池中取出使用
        AbstractFlyweight tom = FlyweightFactory.getObject("tom");
        tom.action();

        //外部状态值为 "tom" 的对象之前已经创建过, 直接从对象池中取出使用
        AbstractFlyweight tom2 = FlyweightFactory.getObject("tom");
        tom2.action();

        //外部状态值为 "Jerry" , 对象池中没有该对象, 创建后放入对象池, 然后从对象池中取出使用
        AbstractFlyweight jerry = FlyweightFactory.getObject("Jerry");
        jerry.action();
    }
}

